<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('attendance_rules', function (Blueprint $table) {
            $table->id();
            $table->string('name'); // 规则名称
            $table->string('code')->unique(); // 规则编码
            $table->enum('type', ['fixed', 'flexible', 'shift', 'no_check']); // 考勤类型：固定时间、弹性时间、倒班、不考勤
            $table->text('description')->nullable(); // 规则描述

            // 工作时间设置
            $table->time('work_start_time')->nullable(); // 上班时间
            $table->time('work_end_time')->nullable(); // 下班时间
            $table->time('break_start_time')->nullable(); // 午休开始时间
            $table->time('break_end_time')->nullable(); // 午休结束时间

            // 弹性时间设置
            $table->integer('flexible_minutes')->default(0); // 弹性时间（分钟）
            $table->boolean('allow_overtime')->default(true); // 是否允许加班

            // 容忍度设置
            $table->integer('late_tolerance_minutes')->default(10); // 迟到容忍时间（分钟）
            $table->integer('early_leave_tolerance_minutes')->default(10); // 早退容忍时间（分钟）

            // 补卡设置
            $table->boolean('allow_makeup')->default(false); // 是否允许补卡
            $table->integer('monthly_makeup_limit')->default(0); // 月度补卡限额
            $table->text('makeup_approval_required')->nullable(); // 补卡审批要求

            // 位置限制
            $table->enum('location_restriction', ['none', 'fixed', 'area', 'gps'])->default('none');
            $table->json('location_data')->nullable(); // 位置数据（IP、GPS坐标等）

            // 适用范围
            $table->json('applicable_departments')->nullable(); // 适用的部门
            $table->json('applicable_positions')->nullable(); // 适用的岗位
            $table->json('applicable_users')->nullable(); // 适用的具体人员

            // 倒班制设置
            $table->boolean('is_shift_work')->default(false); // 是否倒班制
            $table->enum('shift_type', ['2_shift', '3_shift', '4_shift'])->nullable(); // 倒班类型
            $table->json('shift_schedule')->nullable(); // 倒班排班表

            // 状态
            $table->enum('status', ['active', 'inactive'])->default('active');
            $table->integer('sort_order')->default(0);

            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('attendance_rules');
    }
};
